home *** CD-ROM | disk | FTP | other *** search
- /*
- * CopyRight 1995. Nicholas Poljakov all rights reserved.
- */
- #include <dos.h>
- #include <stdio.h>
- #include <string.h>
- #include <io.h>
- #include <fcntl.h>
- #include <stdlib.h>
- #include <state1.h>
-
- #define BORDER 1
- #define REV_VID 0x70
- #define NORM_VID 0x1E
- #define MAX_FRAME 31
- #define BKSP 8
- #define F1 59
- #define F2 60
- #define F3 61
- #define F4 62
- #define F5 63
- #define F6 64
- #define F7 65
- #define F8 66
- #define F9 67
- #define F10 68
- #define HM 71 /* Home key */
- #define UP 72 /* Up Arrow */
- #define PU 73 /* Page Up */
- #define LT 75 /* Left Arrow */
- #define RT 77 /* Right Arrow */
- #define END 79 /* End key */
- #define DN 80 /* Down Arrow */
- #define PD 81 /* Page Down */
- #define ESC '\033'
- #define DIR 0x10
- #define BLKSIZ 1000 /* block size for send */
-
- #define ROWS1 19
- #define ROWS2 23
- #define ROWS 25
- #define COLS 78
- #define L_W 20
- #define M_W 36
- #define R_W 20
- #define SCRNSIZE ((ROWS)*(COLS+2)*2)
- #define LAST (24 * 80)*2
-
- #define M0C 4 /* Files maping col.s */
- #define M0L 14 /* Files maping rows */
- #define M0F (((80 * 5) + 9)) * 2
- #define INTR 18*2
-
- extern unsigned int attr1b;
- extern unsigned int *ptrs;
- extern int size;
- extern unsigned char row, col;
- extern int adapter;
- extern unsigned char far *videomem;
- extern int offset;
- extern int sw;
- extern char *path;
- extern char file[12];
- extern char tpname[31];
- extern char luname[8];
- extern char rcv_file[12];
- extern char dta[128];
-
- extern char far *vid_mem;
- extern short cur_ln;
-
- extern struct part { /* partner structure */
- char plu[8] ; /* str plu_name */
- int psl; /* str plu_s_limit */
- char mode_name[8] ; /* str mode_name */
- int max_ru_size; /* str ru_h_size */
- int pacing; /* str = */
- unsigned char lu_type;
- } pstr[4];
-
- extern struct APL_PARM{
- int status; /* 0-start aplmain,1-start transaction,2-dos shell */
- char p[80]; /* string for system(p) */
- char args[64];/* string of arguments */
- int rc; /* aplmain return code */
- char dir[60];/* directory name for aplmain */
- int drlen; /* directory name length */
- void *tpe; /* entry of exit program */
- char pgm_state;
- }*p_aparm;
-
- extern struct menu_frame {
- int startx, endx, starty, endy;
- unsigned char *p;
- char **menu;
- char *keys;
- int border;
- unsigned long count;
- unsigned char attrib;
- int active;
- int curx, cury;
- char *header;
- } frame[MAX_FRAME];
-
- extern char p_dcl[21];
- extern unsigned char dr_ind[80];
- extern char c_pt[60];
- extern int drive_ind[10];
- extern char lu_name[9];
- extern char lu_id[8];
- extern char tp_id[8];
- extern unsigned long conv_id;
- extern char mode_name[9];
- extern char tp_exist;
-
- SendFil(p, n)
- char *p;
- int n;
- {
- long FS; /* File Size */
- int fd; /* File handle */
- char *buff; /* input buffer */
- unsigned s;
- char fsiz[10];
- char retstr[8];
- unsigned long count;
- int i;
- int ch;
- unsigned char rts;
- unsigned char wr;
- unsigned int max_length ;
-
- char pt[80];
- unsigned char tpn[64];
- struct rc {
- unsigned int prim;
- unsigned long sec;
- } v_rc;
- struct msg { /*send_data*/
- int len;
- char str[BLKSIZ];
- } *p_gds;
- unsigned long rc;
- char p_lu[9];
- char p_mode[9];
- int length;
-
- if(( fd = open(p, O_RDONLY | O_BINARY)) < 0){
- window(20);
- window_xy(20, 6, 1);
- strcpy(pt, "Error file open. Press ESC to continue.");
- window_puts(20, pt);
- goto SendExit;
- }
- FS = filelength( fd );
- sprintf(fsiz, "%lu", FS);
-
- if ((p_gds = malloc(sizeof(struct msg))) == NULL) {
- return 1;
- }
- buff = (char *)p_gds + 2;
- window(20);
- window_xy(20, 1, 1);
- strcpy(pt, "Partner LU..................");
- strcat(pt, pstr[cur_ln].plu);
- window_puts(20, pt);
- window_xy(20, 2, 1);
- strcpy(pt, "File name...................");
- strcat(pt, p);
- window_puts(20, pt);
- window_xy(20, 3, 1);
- strcpy(pt, "File size...................");
- strcat(pt, fsiz);
- window_puts(20, pt);
- window_xy(20, 4, 1);
- strcpy(pt, "Sent count..................0");
- window_puts(20, pt);
-
- if ( n != 0 ){
- if (!tp_exist) {
- tp_started
- (lu_id,
- tp_id,
- &rc);
- if (rc != 0) {
- window_xy(20, 6, 1);
- window_puts(20, "TP_started failure. Press ESC to exit.");
- goto SendExit;
- }
- tp_exist = 1; /* TP_started O.K! */
- }
-
- strcpy (tpn,"SEND "); /* name of work */
- strcat (tpn, p); /* file name */
- /*conv_id - return param -id work link */
- strcpy(p_lu, pstr[cur_ln].plu);
- strcpy(p_mode, pstr[cur_ln].mode_name);
- allocate (p_lu,
- p_mode,
- tpn,
- WHEN_SESSION_ALLOCATED,
- NONE,
- NONE,
- NULL,
- NULL,
- tp_id,
- &conv_id,
- NULL,
- &v_rc) ;
-
- if (v_rc.prim != 0) {
- window_xy(20, 6, 1);
- window_puts(20, "Allocation failure. Press ESC to exit.");
- goto SendExit;
- }
- }
- else
- {
- max_length = 255;
- recwait (tp_id,
- conv_id,
- ll,
- &v_rc,
- &length,
- max_length,
- &rts,
- p_gds,
- &wr);
- }
-
- count = 0;
- while ((s = read(fd,buff, BLKSIZ)) > 0 ) {
- /* Send this line */
- count += s;
- p_gds->len =s + 2;
- length=p_gds->len;
- send_data(tp_id,
- conv_id,
- p_gds,
- 0,
- 0,
- length,
- &v_rc,
- &rts);
- max_length = 255;
- if (v_rc.prim == 0) {
- recwait (tp_id,
- conv_id,
- ll,
- &v_rc,
- &length,
- max_length,
- &rts,
- p_gds,
- &wr);
- }
- else {
- window(14);
- window_xy(14, 1, 4);
- window_puts(14, "Return code from send");
- sprintf(retstr,"%x", v_rc.prim);
- i = (30 - strlen(retstr))/2;
- window_xy(14, 2, i);
- window_puts(14, retstr);
- while ((ch = getch()) != ESC) ;
- deactivate(14);
- goto EndOfSend;
- }
-
- /* Map bytes count */
- window_xy(20, 4, 29);
- sprintf(fsiz, "%lu", count);
- window_puts(20, fsiz);
- }
- EndOfSend:
- deallocate (tp_id,
- conv_id,
- Flush,
- &v_rc);
- if (v_rc.prim != 0) {
- window(14);
- window_xy(14, 1, 4);
- window_puts(14, "Ret. code from DEALLOCATE");
- sprintf(retstr,"%x", v_rc.prim);
- i = (30 - strlen(retstr))/2;
- window_xy(14, 2, i);
- window_puts(14, retstr);
- while ((ch = getch()) != ESC) ;
- deactivate(14);
- }
- window_xy(20, 6, 1);
- strcpy(pt, "Ready! Press ESC to continue.");
- window_puts(20, pt);
-
- SendExit:
- if (p_aparm -> pgm_state != 1) { /* Local control */
- while ((ch = getch()) != ESC) ;
- }
- else {
- tp_ended (tp_id, &rc);
- tp_exist = 0;
- }
- deactivate(20);
- close( fd );
- free( p_gds );
-
- return (0);
- }
-